<?php
header("Content-type: text/html; charset=utf-8");

session_start();  



defined('PUBLIC_PATH')
    || define('PUBLIC_PATH', realpath(dirname(__FILE__) ));

define('SITE', PUBLIC_PATH); //FIXME почистить SITE на всем сайте

// config
if( is_file(PUBLIC_PATH . '/Engine/startup.php') ) {
    require(PUBLIC_PATH . '/Engine/startup.php');
} else {
// Попытка зайти на сайт через корневой домен (http://babagay.ru/remontik.kh.ua/)  
  header("/");
}





    // [autoload] вариант 1 -------------------------------------- 
    //function my_autoloader($class) {
        //include PUBLIC_PATH  . '/WebBuilderCms/System_Interface/Class/class.' . $class . '.php';
    //}
    //spl_autoload_register('my_autoloader');
  
    //  [autoload] вариант 2
    class ClassAutoloader {
        public function __construct() {
            spl_autoload_register(array($this, 'loader'));
        }
        private function loader($className) {
            //echo 'Trying to load ', $className, ' via ', __METHOD__, "()\n";

            // сначала пробуем подключить из библиотеки
            $file = PUBLIC_PATH  . '/Engine/lib/class.' . $className . '.php';
            if(is_file($file))
              include $file;
            elseif( is_file(PUBLIC_PATH  . '/Engine/Model/' . $className . '.php') )
            // ищем модель
                include PUBLIC_PATH  . '/Engine/Model/' . $className . '.php';
            else {
            // потом - подключить модуль 
              $modul_name = $className; //'Face'; 
              $file = PUBLIC_PATH  . '/Moduls/'.$modul_name.'/modul.' . $className . '.php';
              if(is_file($file))
                include $file;
              else {
              // пробуем подкючить контроллер               
                $controller_name = $className;
                $file = PUBLIC_PATH . '/Engine/Controller/'.$controller_name  . '.php';
                if(is_file($file))
                  include $file;
                else {
                // виджеты
                  preg_match('/Widget/i',$className,$matches);
                  if(isset($matches[0])){
                    $pos = strpos($className, 'Widget');
                    $widget_name = substr($className, 0, $pos);
                    $modul_name = $widget_name;
                  } else {
                    $widget_name = $className; 
                  }  
                  $file = PUBLIC_PATH  . '/Widgets/'.$widget_name  . '.php';
                  if(is_file($file))
                    include $file;
                  else {
                    $file = PUBLIC_PATH  . '/Widgets/'.$widget_name. 'Widget.php';
                    if(is_file($file))
                      include $file;
                    else {
                    // другие юниты
                    }
                  }
                }
              } 
            } 
        }
    }//
    $autoloader = new ClassAutoloader();
    


    // реестр
    $registry = Registry::getInstance();

    $registry->zone = "backend";

    // TODO [!] Сейчас создается переменная $registry, которая тулится во все компоненты движка
    // Но! Все они изменяют реестр, поэтому все они получают в конструктор УСТАРЕВШУЮ копию реестра.

    // ------------ Инициализация базовых ------------

    // Модель
    $registry->set('Model', new Model());

    // база
    $BD_conn = new BD(true); if($BD_conn->connection_established !== true) echo 'Ошибка соединения с базой';
    $registry->set('db', $BD_conn);

    // загрузчик
    $loader = new Loader($registry);
    $registry->set('load', $loader);

    // Config
    $config = new Config();
    $config->config_error_filename = 'config_error';
    $registry->set('config', $config);

    // Request
    $request = new Request();
    $registry->set('request', $request);




    // виджет
    $Widget = new Widget($registry);
    $registry->set('Widget', $Widget); //fb($Widget);

    // контроллер
    // if(admin_mode) $Controller = new BackController;
    // Фронт-контроллер
    $Controller = new Controller($registry);
    $registry->set('Controller', $Controller);

 
    // ---------- Инициализация вспомогательных ----------
    

    
    // юзер
    $User = new User;
    $registry->set('user', $User);
    

    
    // Log 
    $log = new Log($config->get('config_error_filename'));
    $registry->set('log', $log);
    

    
    // Session
    $session = new Session();
    $registry->set('session', $session);



    
    // вывод
    $html = $Controller->output();


     
    echo $html;



